/**
 * 
 */
package No1_100.No51_60.MaximumSubarray_53;
/** 
 * @author  作者 E-mail: ttljtw@qq.com
 * @date 创建时间：2017年3月2日 下午7:45:15 
 * @version 1.0 
 * @parameter  
 * @since  
 * @return  
 */
/**
 * @author 李敬
 *
 */
public class Solution {
	/*
	 * Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
	 * 
	 * For example, given the array [-2,1,-3,4,-1,2,1,-5,4],
	 * 
	 * the contiguous subarray [4,-1,2,1] has the largest sum = 6.
	 * 
	 * 
	 * 这道题要求 求连续的数组值，加和最大。
	 * 试想一下，如果我们从头遍历这个数组。对于数组中的其中一个元素，它只有两个选择：
	 * 1. 要么加入之前的数组加和之中（跟别人一组）
	 * 2. 要么自己单立一个数组（自己单开一组）
	 * 
	 * 所以对于这个元素应该如何选择，就看他能对哪个组的贡献大。
	 * 如果跟别人一组，能让总加和变大，还是跟别人一组好了；
	 * 如果自己起个头一组，自己的值比之前加和的值还要大，那么还是自己单开一组好了。
	 * 
	 * 所以利用一个sum数组，记录每一轮sum的最大值，
	 * sum[i]表示当前这个元素是跟之前数组加和一组还是自己单立一组好，
	 * 然后维护一个全局最大值即位答案。
	 * 
	 * */
    public int maxSubArray(int[] nums) {
        int max = nums[0];
        int[] sum = new int[nums.length];
        sum[0] = nums[0];
        for(int i = 1;i<nums.length;i++){
            sum[i] = Math.max(nums[i],nums[i]+sum[i-1]);
            max = Math.max(max,sum[i]);
        }
        return max;
    }

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

}
